<?php

//Cette fonction génère, sauvegarde et retourne un token
//Vous pouvez lui passer en paramètre optionnel un nom pour différencier les formulaires
function generer_token($nom = '')
{
	$token = uniqid(rand(), true);
	$_SESSION[$nom.'_token'] = $token;
	$_SESSION[$nom.'_token_time'] = time();
	
	return $token;
}


//**********************************************************************************************************************************//
//**********************************************************************************************************************************//
//**********************************************************************************************************************************//


//Cette fonction vérifie le token
//Vous passez en argument le temps de validité (en secondes)
//Le referer attendu (adresse absolue du site)
//Le nom optionnel si vous en avez défini un lors de la création du token
function verifier_token($temps, $referer='', $nom = '', $nom_post="token")
{
	$page = preg_replace("#\?#", "\\\?", 'http://localhost/Dilemnia/'.$referer);
	$page = preg_replace("# #", "%20", $page);

	
	if(isset($_SESSION[$nom.'_token']) && isset($_SESSION[$nom.'_token_time']) && isset($_POST[$nom_post]))
	{
		if($_SESSION[$nom.'_token'] == $_POST[$nom_post] AND $_SESSION[$nom.'_token_time'] >= (time() - $temps)
			AND (preg_match("#^$page#", $_SERVER['HTTP_REFERER']) ) )
					return true;
	}

	return false;
}


//fonction identique sauf que le token est passé en get et non en post
function verifier_token_get($temps, $referer='', $nom = '', $nom_get="token")
{
	$page = preg_replace("#\?#", "\\\?", 'http://localhost/Dilemnia/'.$referer);
	$page = preg_replace("# #", "%20", $page);
	
	if(isset($_SESSION[$nom.'_token']) && isset($_SESSION[$nom.'_token_time']) && isset($_GET[$nom_get]))
	{
		if($_SESSION[$nom.'_token'] == $_GET[$nom_get] AND $_SESSION[$nom.'_token_time'] >= (time() - $temps)
			AND (preg_match("#^$page#", $_SERVER['HTTP_REFERER'])  ) )
					return true;
	}


	return false;
}

?>
